/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package classes;

import bd.Database;
import bd.GenerateSql;
import java.util.UUID;
/**
 *
 * @author user
 */
public class Pessoa 
{
    private String   codigo= "";		
    private String   nome= "";		
    private String   fantasia= "";
    private String   endereco= "";	
    private String   bairro= "";		
    private String   cidade= "";		
    private String   profisao= "";	
    private String   conjuge= "";		
    private String   pai= "";			
    private String   mae= "";			
    private String   trabalho= "";	
    private String   refere1= "";		
    private String   refere2= "";		
    private String   email= "";		
    private String   vendedor= "";	
    private String   convenio= "";	
    private String   credito= "";		
    private String   estado= "";		
    private String   usuario= "";		
    private String   liberado= "";	
    private String   cep= "";			
    private String   cpf= "";		
    private String   insc= "";
    private String   rg= "";			
    private String   fone= "";			
    private String   fax= "";			
    private String   fonetrab= "";	
    private String   fonerefe= "";	
    private String   foneref1= "";	
    private String   ativo= "";		
    private String   prefere= "";		
    private String   cadspc= "";		
    private String   blqalto= "";		
    private String   cadastro= "";	
    private String   datnasc= "";		
    private String   datcomp= "";		
    private String   datbloq= "";		
    private String   diaven= "";		
    private String   atraso= "";		
    private String   salario= "";		
    private String   limite= "";		
    private String   compras= "";		
    private String   vcompra= "";		
    private String   ficha= "";
    private String   uCompra= "";
    
    private Database bd;
    private String msgErro;
    private String sql;
    private GenerateSql gSql;
    
    public Pessoa(Database bd)
    {
        this.bd= bd;
        gSql= new GenerateSql(bd);
    }
    
    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getFantasia() {
        return fantasia;
    }

    public void setFantasia(String fantasia) {
        this.fantasia = fantasia;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getProfisao() {
        return profisao;
    }

    public void setProfisao(String profisao) {
        this.profisao = profisao;
    }

    public String getConjuge() {
        return conjuge;
    }

    public void setConjuge(String conjuge) {
        this.conjuge = conjuge;
    }

    public String getPai() {
        return pai;
    }

    public void setPai(String pai) {
        this.pai = pai;
    }

    public String getMae() {
        return mae;
    }

    public void setMae(String mae) {
        this.mae = mae;
    }

    public String getTrabalho() {
        return trabalho;
    }

    public void setTrabalho(String trabalho) {
        this.trabalho = trabalho;
    }

    public String getRefere1() {
        return refere1;
    }

    public void setRefere1(String refere1) {
        this.refere1 = refere1;
    }

    public String getRefere2() {
        return refere2;
    }

    public void setRefere2(String refere2) {
        this.refere2 = refere2;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getVendedor() {
        return vendedor;
    }

    public void setVendedor(String vendedor) {
        this.vendedor = vendedor;
    }

    public String getConvenio() {
        return convenio;
    }

    public void setConvenio(String convenio) {
        this.convenio = convenio;
    }

    public String getCredito() {
        return credito;
    }

    public void setCredito(String credito) {
        this.credito = credito;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getLiberado() {
        return liberado;
    }

    public void setLiberado(String liberado) {
        this.liberado = liberado;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public String getFone() {
        return fone;
    }

    public void setFone(String fone) {
        this.fone = fone;
    }

    public String getFax() {
        return fax;
    }

    public void setFax(String fax) {
        this.fax = fax;
    }

    public String getFonetrab() {
        return fonetrab;
    }

    public void setFonetrab(String fonetrab) {
        this.fonetrab = fonetrab;
    }

    public String getFonerefe() {
        return fonerefe;
    }

    public void setFonerefe(String fonerefe) {
        this.fonerefe = fonerefe;
    }

    public String getFoneref1() {
        return foneref1;
    }

    public void setFoneref1(String foneref1) {
        this.foneref1 = foneref1;
    }

    public String getAtivo() {
        return ativo;
    }

    public void setAtivo(String ativo) {
        this.ativo = ativo;
    }

    public String getPrefere() {
        return prefere;
    }

    public void setPrefere(String prefere) {
        this.prefere = prefere;
    }

    public String getCadspc() {
        return cadspc;
    }

    public void setCadspc(String cadspc) {
        this.cadspc = cadspc;
    }

    public String getBlqalto() {
        return blqalto;
    }

    public void setBlqalto(String blqalto) {
        this.blqalto = blqalto;
    }

    public String getCadastro() {
        return cadastro;
    }

    public void setCadastro(String cadastro) {
        this.cadastro = cadastro;
    }

    public String getDatnasc() {
        return datnasc;
    }

    public void setDatnasc(String datnasc) {
        this.datnasc = datnasc;
    }

    public String getDatcomp() {
        return datcomp;
    }

    public void setDatcomp(String datcomp) {
        this.datcomp = datcomp;
    }

    public String getDatbloq() {
        return datbloq;
    }

    public void setDatbloq(String datbloq) {
        this.datbloq = datbloq;
    }

    public String getDiaven() {
        return diaven;
    }

    public void setDiaven(String diaven) {
        this.diaven = diaven;
    }

    public String getAtraso() {
        return atraso;
    }

    public void setAtraso(String atraso) {
        this.atraso = atraso;
    }

    public String getSalario() {
        return salario;
    }

    public void setSalario(String salario) {
        this.salario = salario;
    }

    public String getLimite() {
        return limite;
    }

    public void setLimite(String limite) {
        this.limite = limite;
    }

    public String getCompras() {
        return compras;
    }

    public void setCompras(String compras) {
        this.compras = compras;
    }

    public String getVcomprav() {
        return vcompra;
    }

    public void setVcompra(String vcompra) {
        this.vcompra = vcompra;
    }

    public String getFicha() {
        return ficha;
    }

    public void setFicha(String ficha) {
        this.ficha = ficha;
    }
    
    public String getInsc() {
      return insc;
   }

    public void setInsc(String insc) {
      this.insc = insc;
   }
   
    public String getUCompra()
    {
       return this.uCompra;
    }
    
    public void setUCompra(String uCompra)
    {
       this.uCompra = uCompra;
    }
    
    public String getMsgErro()
    {
        return msgErro;
    }
    
    public Boolean saveCliente(Boolean autoCommit)
    {
        String pessoaId=UUID.randomUUID().toString();
        if( !savePessoa(autoCommit, pessoaId))
           return false;
        return savePcliente(autoCommit, pessoaId);
    }
    
    public Boolean saveFornecedor(Boolean autoCommit)
    {
        String pessoaId=UUID.randomUUID().toString();
        if( !savePessoa(autoCommit, pessoaId))
           return false;
        return savePfornecedor(autoCommit, pessoaId);       
    }
    
    private Boolean savePessoa(Boolean autoCommit,String pessoaId)
    {
        gSql.prepare();
        gSql.setTable("pessoa");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);
 
        //gSql.setValue("","pessoa_sequencia"); 
        gSql.setValue("1","pessoa_empresa_id"); 
        gSql.setValue(pessoaId,"pessoa_id"); 
        gSql.setValue(nome,"pessoa_nome"); 
        gSql.setValue(fantasia,"pessoa_apelido");  
        gSql.setValue("","pessoa_web"); 
        gSql.setValue(email,"pessoa_email"); 
        gSql.setValue(cadastro,"pessoa_data_cadastro"); 
        gSql.setValue(new java.text.SimpleDateFormat("yyyy/MM/dd").format(new java.util.Date()),"pessoa_data_alteracao"); 
        gSql.setValue("","regiao_id"); 
        gSql.setValue("false","pessoa_fornecedor"); 
        gSql.setValue(liberado,"pessoa_liberado"); 
        gSql.setValue(ativo,"pessoa_ativo"); 
        gSql.setValue(cadspc,"pessoa_lista_negra"); 
        gSql.setValue("true","pessoa_cliente"); 
        gSql.setValue(codigo,"pessoa_codigo"); 
        gSql.setValue("","pessoa_ordem"); 
        gSql.setValue("false","pessoa_default"); 
        gSql.setValue("","pessoa_news_letter"); 
        
        gSql.setValue(cpf,"pessoa_cnpf_cnpj");
        if( cpf.length() > 14)
        {
           gSql.setValue("J","pessoa_tipo");//J ou F 
           gSql.setValue("true","pessoa_juridica");    
        }  
        else
        {
           gSql.setValue("F","pessoa_tipo");//J ou F 
           gSql.setValue("false","pessoa_juridica"); 
        }
        gSql.setValue("","pessoa_observacao"); 
        gSql.setValue("","pessoa_impostos_taxas"); 
        gSql.setValue("","pessoa_correntista"); 
        gSql.setValue("","pessoa_agente"); 
        gSql.setValue("","pessoa_foto"); 
        gSql.setValue("","pessoa_path_assinatura_digital");    
        
        if( !gSql.execute(autoCommit))
        {
            msgErro = gSql.getMsgErro();
            return false;
        }
        
        if( !saveEndereco(autoCommit, pessoaId)) 
            return false;
        if( !saveTelefone(autoCommit, pessoaId)) 
            return false;
        if( !savePfisica(autoCommit, pessoaId)) 
            return false;
        if( !savePjuridica(autoCommit, pessoaId)) 
            return false;        
        return true;
    }
    
    private String saveBairro(Boolean autoCommit)
    {
        sql= "SELECT bairro_id FROM bairro WHERE bairro_nome = '"+this.bairro+"'";
        
        Object tmp= bd.executeScalar(sql);
        
        if( tmp != null)
            return tmp.toString();
            
        gSql.prepare();
        gSql.setTable("bairro");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);
        gSql.setValue(bairro,"bairro_nome");
        if( gSql.execute(autoCommit))
        {
            sql= "SELECT last_value FROM bairro_bairro_id_seq";
            return bd.executeScalar(sql).toString();
        }
        return "1";
    }

    private String saveCidade(Boolean autoCommit)
    {
        sql= "SELECT cidade_id FROM cidade WHERE cidade_nome = '"+this.cidade+"'";
        
        Object tmp= bd.executeScalar(sql);
        
        if( tmp != null)
            return tmp.toString();
            
        gSql.prepare();
        gSql.setTable("cidade");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);
        gSql.setValue(cidade,"cidade_nome");
        if( gSql.execute(autoCommit))
        {
            sql= "SELECT last_value FROM cidade_cidade_id_seq";
            return bd.executeScalar(sql).toString();
        }      
        return "1";
    }
    
    private String saveEstado(Boolean autoCommit)
    {
        //id do estado = sigla do estado
        if( estado == null || estado.equals("null"))
            return "GO";
        sql= "SELECT estado_id FROM estado WHERE estado_id = '"+this.estado+"'";
        
        Object tmp= bd.executeScalar(sql);
        
        if( tmp != null)
            return tmp.toString();
            
        gSql.prepare();
        gSql.setTable("estado");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);
        gSql.setValue(estado,"estado_id");
        gSql.setValue(estado,"estado_nome");
        if( gSql.execute(autoCommit))
        {
            return estado;
        }  
        return "1";
    }
    
    private Boolean saveEndereco(Boolean autoCommit, String id)
    {       
        String bairroId, cidadeId, estadoId;
        
        bairroId = saveBairro(autoCommit);        
        cidadeId = saveCidade(autoCommit);
        estadoId = saveEstado(autoCommit);
 
        gSql.prepare();
        gSql.setTable("endereco");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);      
        
        gSql.setValue(id,"id"); 
        gSql.setValue("1","tipo_endereco_id"); //Residencial
        gSql.setValue(endereco,"endereco_endereco"); 
        gSql.setValue("","endereco_complemento"); 
        gSql.setValue("","endereco_numero"); 
        gSql.setValue("","endereco_ponto_referencia"); 
        gSql.setValue(bairroId,"bairro_id");        
        gSql.setValue(cidadeId,"cidade_id");  
        gSql.setValue(estadoId,"estado_id"); 
        gSql.setValue(cep,"endereco_cep"); 
        //gSql.setValue("","endereco_id"); 
        gSql.setValue("","endereco_correnpondencia"); 
        gSql.setValue("","endereco_cobranca");
        if( !gSql.execute(autoCommit))
        {
            msgErro= gSql.getMsgErro();
            return false;
        }
        return true;
    }
    
    private Boolean saveTelefone(Boolean autoCommit, String id)
    {
        gSql.prepare();
        gSql.setTable("telefone");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);
        
        gSql.setValue(id,"id"); 
        gSql.setValue("1","tipo_telefone_id"); //Residencial
        gSql.setValue("","telefone_ddd"); 
        gSql.setValue(fone,"telefone_numero"); 
        gSql.setValue("","telefone_ramal"); 
        gSql.setValue("","telefone_id");        
        if( !gSql.execute(autoCommit))
        {
            msgErro= gSql.getMsgErro();
            return false;
        }
        
        
        gSql.prepare();        
        gSql.setValue(id,"id"); 
        gSql.setValue("2","tipo_telefone_id"); //Comercial
        gSql.setValue("","telefone_ddd"); 
        gSql.setValue(fonetrab,"telefone_numero"); 
        gSql.setValue("","telefone_ramal"); 
        gSql.setValue("","telefone_id");
        if( !gSql.execute(autoCommit))
        {
            msgErro= gSql.getMsgErro();
            return false;
        }
        
        gSql.prepare();        
        gSql.setValue(id,"id"); 
        gSql.setValue("5","tipo_telefone_id"); //Fax
        gSql.setValue("","telefone_ddd"); 
        gSql.setValue(fax,"telefone_numero"); 
        gSql.setValue("","telefone_ramal"); 
        gSql.setValue("","telefone_id");
        if( !gSql.execute(autoCommit))
        {
            msgErro= gSql.getMsgErro();
            return false;
        }
        
        return true;
    }
    
    private Boolean savePcliente(Boolean autoCommit, String id)
    {   
        gSql.prepare();
        gSql.setTable("pcliente");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);        
        
        //gSql.setValue("","pcliente_id"); 
        gSql.setValue(id,"pessoa_id"); 
        gSql.setValue("1","empresa_id"); 
        gSql.setValue("","conta_contabil"); 
        gSql.setValue(cadastro,"data_cadastro"); 
        gSql.setValue("-1","operador_id"); 
        gSql.setValue(limite,"limite_credito"); 
        gSql.setValue("","taxa_boleto"); 
        gSql.setValue("","data_ultima_compra");        
        if( !gSql.execute(autoCommit))
        {
            msgErro = gSql.getMsgErro();
            return false;
        }
        return true;
    }
    
    private Boolean savePfisica(Boolean autoCommit, String id)
    {
        String orgaoEmissor="";
        int index;
        
        if( rg.length() > 0)
        {
           index = rg.indexOf("SSP");
           if( index >=0 )
           {
               orgaoEmissor = rg.substring(index, rg.length());
               rg = rg.substring(0, index-1);
           }
           if( rg.length() > 20 )
              rg = rg.substring(0, 19);
        }
        
        gSql.prepare();
        gSql.setTable("pfisica");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);
        
        gSql.setValue(id,"pessoa_id"); 
        gSql.setValue(rg,"pfisica_rg"); 
        gSql.setValue(orgaoEmissor,"pfisica_orgaoemissorrg"); 
        gSql.setValue("","pfisica_sexo"); 
        gSql.setValue("","cidade_id_naturalidade"); 
        gSql.setValue(pai,"pfisica_nomepai"); 
        gSql.setValue(mae,"pfisica_nomemae"); 
        gSql.setValue("","pfisica_tiporesidencia"); 
        gSql.setValue("","pfisica_estadocivil"); 
        gSql.setValue(salario,"pfisica_renda"); 
        gSql.setValue(datnasc,"pfisica_data_nascimento"); 
        gSql.setValue("","pfisica_renda_familiar");
        if( !gSql.execute(autoCommit))
        {
            msgErro = gSql.getMsgErro();
            return false;
        }
        return true;        
    }
    
    private Boolean savePjuridica(Boolean autoCommit, String id)
    {
        gSql.prepare();
        gSql.setTable("pjuridica");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);   
   
        gSql.setValue(id,"pessoa_id");
        gSql.setValue(insc,"pjuridica_inscest");
        gSql.setValue("","pjuridica_inscmuni");
        gSql.setValue("1","ramoatividade_id");
        gSql.setValue(datnasc,"pjuridica_data_fundacao");
        if( !gSql.execute(autoCommit))
        {
            msgErro = gSql.getMsgErro();
            return false;
        }
        return true;          
    }

    private Boolean savePfornecedor(Boolean autoCommit, String id)
    {
        gSql.prepare();
        gSql.setTable("pfornecedor");
        gSql.setCommandType(GenerateSql.CommandType.CMD_INSERT);      
       
         //gSql.setValue("","pfornecedor_id"); 
         gSql.setValue(id,"pessoa_id");
         gSql.setValue("1","empresa_id");
         gSql.setValue("","conta_contabil"); 
         gSql.setValue(cadastro,"data_cadastro");
         gSql.setValue("-1","operador_id"); 
         gSql.setValue(uCompra,"data_ultima_venda");
        if( !gSql.execute(autoCommit))
        {
            msgErro = gSql.getMsgErro();
            return false;
        }
        return true;               
    }
}
